关于 Eureka 的详细介绍已经在上篇文章通俗的讲了。Eureka 本身是使用 java 来开发的,Spring Cloud 使用 Spring Boot 技术对 Eureka 进行了封装,所以在 Spring Cloud 中使用 Eureka 非常方便,只需要引入 spring-cloud-starter-netflix-eureka-server 依赖即可,然后启动即可。
1.Eureka 搭建
创建一个普通的 Spring Boot 项目,创建时添加 Eureka 依赖:
项目创建成功后,在项目启动类上添加注解,标记该项目是一个 Eureka Server:
|
在 application.properties 中配置:
# 给当前服务取名 |
然后启动项目,项目启动成功后在浏览器访问:http://localhost:1111 就可以看到 Eureka 的管理页面了。如下:
2. Eureka 集群
使用了注册中心后,所有的服务都要通过服务注册中心来进行信息交换。服务注册中心的稳定性就非常重要了,一旦服务注册中心掉线,会影响到整个系统的稳定性。所以在实际开发中,Eureka 一般都是以集群的形式出现的。
Eureka 集群,实际上就是启动多个 Eureka 实例, 多个 Eureka 实例之间互相注册,互相同步数据,共同组成一个 Eureka 集群。
搭建 Eureka 集群,首先要修改电脑的 hosts 文件 (c:\windows\System32\drivers\etc\hosts),Linux 上面搭建请点击这篇文章查看。
我这里为了方便操作,直接在第一步搭建 eureka 的 demo 基础上,在 resources 目录下,再添加两个配置文件,分别如下:
application-a.properties 配置如下:
# 给当前服务取名 |
application-b.properties 配置如下:
# 给当前服务取名 |
配置完成后对当前项目打包,
打完包在 IDEA 命令行启动两个实例。两个启动命令分别如下:
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a |
注意:启动第一个 a 之后你会发现控制台报错,是因为它一直发送心跳,而同时 b 还没有上线,等 b 也启动后错误即可消失。如果还报错,那就是代码的问题了。
启动成功后,就可以看到两个服务之间互相注册,共同组成一个集群。 如下图:
2.1 Eureka 集群原理
官方的 Eureka 集群架构图:
在这个集群架构中,Eureka Server 之间过 Replicate 进行数据同步,不同的 EurekaServer 之间不区分主从节点,所有节点都是平等的。节点之间,通过置顶 serviceUrl 来相注册,形成一个集群,进而提高节点的可用性。
在 Eureka Server 集群中,如果有某一个节点宕机,Eureka Client 会自动切到新的 Eureka Server 上。每一个 Eureka Server,都会互相同步数据。Eureka Server 的连接方式,可以是单线的,就是 A——>b——>C,此时,A 的数据也会和 C 之间相同步。但是一般不建议这种写法,在我们配置 serviceUrl 时,可以指定多个注册地址,即 A 可以即注册到 B 上,也可以同时注册到 C 上。
Eureka 分区:
1.region:地理上的不同区域
2.zone:具体的机房